#ifndef __PROJECTOR_H__
#define __PROJECTOR_H__
#include "graph.h"
typedef std::vector<ex> ext_mom_vector;//sixe = number of vertices with external legs
typedef std::vector<field> ext_field_vector; // size = number of external legs, for topology determinig
void graph_ex_subs(exmap,Graph&); // subs exmap to graph expressions
//ext_mom_vector (Graph& G,
void local_mom_subs(Graph&,dia_ext_legs);
ex get_ext_mom_of_vertex(Graph::vertex_descriptor,dia_ext_legs,Graph&);
exvector get_input_momentums_vector(dia_ext_legs,Graph&);
std::vector<field> get_local_ext_fields(Graph&,dia_ext_legs);
//bool find_edge(Graph::edge_descriptor,Graph&);
tuple<exmap,exmap,exvector> get_local_mom_subs_map(exvector);
Graph copy_graph(Graph&);
ex projector(Graph&,exmap,std::vector<field>,exvector);
void get_shrinked_graph(Graph&,Graph&,ex);
#endif // __PROJECTOR_H__
